/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Entidades.UsuarioEnt;
import Utilidades.Conexion;
import Utilidades.Constantes;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author sala115
 */
public class UsuarioDAO {

     Conexion con;
        Connection connect;
    public int ValidateUsuario(UsuarioEnt user) throws SQLException{
    
        con = new Conexion();
        connect = con.getCon();
 int Resultado=0;
        try {
            PreparedStatement st = connect.prepareStatement(Constantes.CONSULTAUSER);
            
          
            st.setString(1, user.getNombres());
            st.setString(2, user.getContrasena());
            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                if (rs.next()) {
                    
                 Resultado=1;
                }else{
                
                Resultado=0;
                }
            }
            connect.close();
            
        } catch (SQLException ex) {
            
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }
        
        return Resultado;
    }
    
    public String autenticar(Connection c, UsuarioEnt Usuario) {
        String sql = UsuarioSqlHelper.autenticar();
        String resultado = null;
        try {
            PreparedStatement st = c.prepareStatement(sql);

            ResultSet rs = null;

            st.setString(1, Usuario.getNumeroDoc());
            st.setString(2, Usuario.getContrasena());

            rs = st.executeQuery();

            if (rs.next()) {
                resultado = "1";
                System.out.print("Devuelve1");
            } else {
                resultado = "0";
                System.out.print("Devuelve0000");
            }
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                c.close();
            } catch (SQLException ex) {
                Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return resultado;
    }

    public int registrarUsuario(Connection c, UsuarioEnt Usuario) {
        String sql = UsuarioSqlHelper.registrarUsuario();
        int resultado = 0;
        try {
            PreparedStatement st = c.prepareStatement(sql);

            st.setString(1, Usuario.getTipoDocumento());
            st.setString(2, Usuario.getNumeroDoc());
            st.setString(3, Usuario.getNombres());
            st.setString(4, Usuario.getApellidoUno());
            st.setString(5, Usuario.getApellidoDos());
            st.setString(6, Usuario.getFechaNacimiento());
            st.setString(7, Usuario.getCorreo());
            st.setString(8, Usuario.getPreguntaSecreta());
            st.setString(9, Usuario.getRespuestaSecreta());
            st.setString(10, Usuario.getPerfil());
            st.setString(11, Usuario.getContrasena());
            st.setString(12, Usuario.getEstado());

            resultado = st.executeUpdate();

        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                c.close();
            } catch (SQLException ex) {
                Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return resultado;
    }

    public List<UsuarioEnt> listarUsuarios(Connection c) {
        String sql = UsuarioSqlHelper.listar();
        List<UsuarioEnt> Usuarios = new ArrayList<UsuarioEnt>();
        try {
            PreparedStatement st = c.prepareStatement(sql);
            ResultSet rs = st.executeQuery();

            while (rs.next()) {
                UsuarioEnt usuario = new UsuarioEnt();
                usuario.setTipoDocumento(rs.getString("TipoDocumento"));
                usuario.setNumeroDoc(rs.getString("Identificacion"));
                usuario.setNombres(rs.getString("Nombres"));
                usuario.setApellidoUno(rs.getString("ApellidoUno"));
                usuario.setApellidoDos(rs.getString("ApellidoDos"));
                usuario.setFechaNacimiento(rs.getString("FechaNacimiento"));
                usuario.setCorreo(rs.getString("Correo"));
                usuario.setPreguntaSecreta(rs.getString("PreguntaSecreta"));
                usuario.setRespuestaSecreta(rs.getString("RespuestaSecreta"));
                usuario.setPerfil(rs.getString("Perfil"));
                usuario.setContrasena(rs.getString("Contrasena"));
                usuario.setEstado(rs.getString("Estado"));
                Usuarios.add(usuario);
            }
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return Usuarios;
    }

    public UsuarioEnt buscarUsuario(UsuarioEnt usuario) throws SQLException{
    
        con = new Conexion();
        connect = con.getCon();
 
        try {
            PreparedStatement st = connect.prepareStatement(Constantes.CONSULTAUSER);
            
            
            st.setString(1, usuario.getNombres());
            st.setString(2, usuario.getContrasena());
            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                if (rs.next()) {
                    
                usuario.setTipoDocumento(rs.getString("TipoDocumento"));
                usuario.setNumeroDoc(rs.getString("Identificacion"));
                usuario.setNombres(rs.getString("Nombres"));
                usuario.setApellidoUno(rs.getString("ApellidoUno"));
                usuario.setApellidoDos(rs.getString("ApellidoDos"));
                usuario.setFechaNacimiento(rs.getString("FechaNacimiento"));
                usuario.setCorreo(rs.getString("Correo"));
                usuario.setPreguntaSecreta(rs.getString("PreguntaSecreta"));
                usuario.setRespuestaSecreta(rs.getString("RespuestaSecreta"));
                usuario.setPerfil(rs.getString("Perfil"));
                usuario.setContrasena(rs.getString("Contrasena"));
                usuario.setEstado(rs.getString("Estado"));
                    
                }
            }
            connect.close();
            
        } catch (SQLException ex) {
            
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }
        
        return usuario;
    }
    
      public List<UsuarioEnt> busquedaUsuarios(UsuarioEnt usuario) throws SQLException{
    
         List<UsuarioEnt>  lstUsuario = new ArrayList<UsuarioEnt>();
         UsuarioEnt user;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.CONSULTAR_USUARIOS_POR_NOMBRE);
            
            
            st.setString(1, usuario.getNombres());
            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                while (rs.next()) {
                    
                    user = new UsuarioEnt();
                    
                user.setTipoDocumento(rs.getString("TIPODOCUMENTO"));
                user.setNumeroDoc(rs.getString("IDENTIFICACION"));
                user.setNombres(rs.getString("NOMBRE"));
                user.setApellidoUno(rs.getString("APELLIDOUNO"));
                user.setApellidoDos(rs.getString("APELLIDODOS"));
                user.setFechaNacimiento(rs.getString("FECHANACIMIENTO"));
                user.setCorreo(rs.getString("CORREO"));
                user.setPreguntaSecreta(rs.getString("PREGUNTA"));
                user.setRespuestaSecreta(rs.getString("RESPUESTA"));
                user.setPerfil(rs.getString("PERFIL"));
                user.setContrasena(rs.getString("CONTRASENA"));
                user.setEstado(rs.getString("ESTADO"));
                    
                    lstUsuario.add(user);
                }
            }
            connect.close();
            
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
            
        }
        
        return lstUsuario;
    }
    public UsuarioEnt buscarUsuario(Connection c, String usuario) {
        UsuarioEnt Usuariobusca = new UsuarioEnt();

        try {
            PreparedStatement cl = c.prepareStatement(UsuarioSqlHelper.buscarUsu(usuario));
            ResultSet rs = cl.executeQuery();

            if (rs.next()) {
                Usuariobusca.setTipoDocumento(rs.getString(1));
                Usuariobusca.setNumeroDoc(rs.getString(2));
                Usuariobusca.setNombres(rs.getString(3));
                Usuariobusca.setApellidoUno(rs.getString(4));
                Usuariobusca.setApellidoDos(rs.getString(5));
                Usuariobusca.setFechaNacimiento(rs.getString(6));
                Usuariobusca.setCorreo(rs.getString(7));
                Usuariobusca.setPreguntaSecreta(rs.getString(8));
                Usuariobusca.setRespuestaSecreta(rs.getString(9));
                Usuariobusca.setPerfil(rs.getString(10));
                Usuariobusca.setEstado(rs.getString(11));
                Usuariobusca.setContrasena(rs.getString(12));

            } else {
                Usuariobusca = null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Usuariobusca;

        } finally {
            try {
                c.close();
            } catch (Exception ex) {
            }

        }

        return Usuariobusca;
    }
    
      public int ingresarUsuario(UsuarioEnt usuario) throws SQLException{
    
        int ingresar = 0;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.INSERT_USUARIO);
            
            st.setString(1,usuario.getTipoDocumento());
            st.setString(2, usuario.getNumeroDoc());
            st.setString(3, usuario.getNombres());
            st.setString(4, usuario.getApellidoUno());
            st.setString(5, usuario.getApellidoDos());
            st.setString(6, usuario.getFechaNacimiento());
            st.setString(7, usuario.getCorreo());
            st.setString(8, usuario.getRespuestaSecreta());
            st.setString(9, usuario.getRespuestaSecreta());
            st.setString(10,usuario.getPerfil());
            st.setString(11,usuario.getEstado());
            st.setString(12,usuario.getContrasena());

            st.executeUpdate();
            ingresar = 1;
            connect.close();
            
        } catch (SQLException ex) {
            
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }
        
        return ingresar;
    }

    public int Modificar(Connection c, UsuarioEnt usuario) {
        String sql = UsuarioSqlHelper.Modificar();
        int resultado = 0;
        try {
            PreparedStatement st = c.prepareStatement(sql);

            st.setString(1, usuario.getTipoDocumento());
            st.setString(2, usuario.getNumeroDoc());
            st.setString(3, usuario.getNombres());
            st.setString(4, usuario.getApellidoUno());
            st.setString(5, usuario.getApellidoDos());
            st.setString(6, usuario.getFechaNacimiento());
            st.setString(7, usuario.getCorreo());
            st.setString(8, usuario.getPreguntaSecreta());
            st.setString(9, usuario.getRespuestaSecreta());
            st.setString(10, usuario.getPerfil());
            st.setString(11, usuario.getContrasena());
            st.setString(12, usuario.getEstado());

            resultado = st.executeUpdate();

        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                c.close();
            } catch (SQLException ex) {
                Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return resultado;
    }

    public int Eliminar(Connection c, UsuarioEnt usuario) {
        String sql = UsuarioSqlHelper.Eliminar();
        int resultado = 0;
        try {
            PreparedStatement st = c.prepareStatement(sql);
            st.setString(1, usuario.getNumeroDoc());
            st.execute();

        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                c.close();
            } catch (SQLException ex) {
                Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return resultado;
    }
    
       public int actualizarUsuario(UsuarioEnt usuario) throws SQLException{
    
        int ingresar = 0;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.ACTUALIZAR_USUARIOS);
           
            st.setString(1, usuario.getTipoDocumento());
            st.setString(2, usuario.getNombres());
            st.setString(3, usuario.getApellidoUno());
            st.setString(4, usuario.getApellidoDos());
            st.setString(5, usuario.getFechaNacimiento());
            st.setString(6, usuario.getCorreo());
            st.setString(7, usuario.getPreguntaSecreta());
            st.setString(8, usuario.getRespuestaSecreta());
            st.setString(9, usuario.getPerfil());
            st.setString(10, usuario.getContrasena());
            st.setString(11, usuario.getEstado());
            st.setString(12, usuario.getNumeroDoc());
            
            st.executeUpdate();
            ingresar = 1;
            connect.commit();
            connect.close();
            
        } catch (SQLException ex) {
            
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
            
        }
        
        return ingresar;
    }
    
      public int eliminarUsuario(int idUsuario) throws SQLException{
    
        int eliminar = 0;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.ELIMINAR_USURIO_POR_IDENTIFICACION);
   
            st.setInt(1, idUsuario);

            st.executeUpdate();
            eliminar = 1;
            connect.close();
            
        } catch (SQLException ex) {
            
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
            
        }
        
        return eliminar;
    }
    
      public UsuarioEnt buscarUsuarioPorId(UsuarioEnt usuario) throws SQLException{
    
        UsuarioEnt user = new UsuarioEnt();
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.CONSULTAR_USUARIOS_POR_DOCUMENTO);

            st.setString(1, usuario.getNumeroDoc());
            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                while (rs.next()) {
               
                user.setTipoDocumento(rs.getString("TIPODOCUMENTO"));
                user.setNumeroDoc(rs.getString("IDENTIFICACION"));
                user.setNombres(rs.getString("NOMBRE"));
                user.setApellidoUno(rs.getString("APELLIDOUNO"));
                user.setApellidoDos(rs.getString("APELLIDODOS"));
                user.setFechaNacimiento(rs.getString("FECHANACIMIENTO"));
                user.setCorreo(rs.getString("CORREO"));
                user.setPreguntaSecreta(rs.getString("PREGUNTA"));
                user.setRespuestaSecreta(rs.getString("RESPUESTA"));
                user.setPerfil(rs.getString("PERFIL"));
                user.setContrasena(rs.getString("CONTRASENA"));
                user.setEstado(rs.getString("ESTADO"));
                    
                    
                }
            }
            connect.close();
            
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
            
        }
        
        return user;
    }
}
